
#include <math.h>

#include "core/var2.h"

// Konstruktor
template<class T>
inline var2<T>::var2(void)
{
 this->x = T(0);
 this->y = T(0);
}

template<class T>
inline var2<T>::var2(T x = T(0), T y = T(0))
{
 this->x = x;
 this->y = y;
}

// Zmniejszenie wektoru
template<class T>
inline var2<T>& var2<T>::operator-=(const var2 &b)
{
 this->x -= b.x;
 this->y -= b.y; 

 return *this;
}

// Zwiekszenie wektoru
template<class T>
inline var2<T>& var2<T>::operator+=(const var2 &b)
{
 this->x += b.x;
 this->y += b.y; 

 return *this;
}

template<class T>
inline var2<T> var2<T>::operator+(const var2 b) const
{
 return var2(x + b.x, y + b.y);
}

template<class T>
inline var2<T> var2<T>::operator-(const var2 b) const
{
 return var2(x - b.x, y - b.y);
}

// Normalizacja wektoru 
template<class T>
inline var2<T>& var2<T>::normalize(void)
{
 float tmp = sqrt(this->x * this->x + this->y * this->y);
 if(tmp) 
 {			
	this->x /= tmp;
    this->y /= tmp;
 }

 return *this;
}
